package pl.register.android.course.factory;

import android.content.Context;
import pl.register.android.chapter.ChapterTitle;
import pl.register.android.classes.ClassesTopic;
import pl.register.android.course.Course;
import pl.register.android.database.DatabaseAdapter;
import pl.register.android.database.dao.CourseDao;
import pl.register.android.database.dao.ProgramDao;
import pl.register.android.database.dao.StudentGroupDao;
import pl.register.android.database.dao.YearDao;
import pl.register.android.group.GroupType;
import pl.register.android.group.StudentsGroup;
import pl.register.android.homework.HomeworkTopic;
import pl.register.android.lesson.LessonProgram;
import pl.register.android.program.Program;
import pl.register.android.year.Year;
import pl.register.android.year.YearType;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Mateusz Strzelecki
 * @since 2013-05-05
 */
public class CourseFactory {

    private DatabaseAdapter databaseAdapter;

    private CourseDao courseDao;

    private YearDao yearDao;

    private StudentGroupDao groupDao;

    private ProgramDao programDao;

    private Context context;

    public CourseFactory(Context context) {
        this.context = context;
        this.databaseAdapter = new DatabaseAdapter(context);
    }

    public Course insertNewCourseFor(Course course) {
        open();
        course = createCourse(course.getStartYear(), course.getEndYear());
        List<Year> years = createYears(course);

        for (Year year : years) {
            createGroups(year);
            createProgram(year);
        }
        close();
        return course;
    }

    public Course insertCourseForNextYear() {
        open();
        Course course = courseDao.getLastCourse();
        List<Year> years = getYearsWithProgram(course);

        course = createCourse(course.getStartYear() + 1, course.getEndYear() + 1);
        years = createYears(course, years);
        for (Year year : years) {
            createGroups(year);
            createNextProgram(year);
        }
        close();
        return course;
    }

    private Course createCourse(int startYear, int endYear) {
        return courseDao.insert(new Course(startYear, endYear));
    }

    private List<Year> createYears(Course course) {
        List<Year> years = new ArrayList<Year>();
        for (YearType yearType : YearType.asList()) {
            years.add(yearDao.insertYear(new Year(null, yearType, yearType.getShortName()), course));
        }
        return years;
    }

    private void createGroups(Year year) {
        List<GroupType> groupTypes = year.getType().getGroups();
        for (GroupType groupType : groupTypes) {
            groupDao.insertGroup(new StudentsGroup(null, groupType), year);
        }
    }

    private void createProgram(Year year) {
        List<LessonProgram> lessonPrograms = new ArrayList<LessonProgram>();
        switch (year.getType()) {
            case FIRST_YEAR:
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Zajęcia wprowadzające, sześcian, perspektywa", "Multiplikacja w bok i w przód, figury - T L O"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Multiplikacja w bok i w przód, figury -X +  O", "Multiplikacje – wężyk"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Obważanek", "Bryły z widoków"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Walce, stożki, kule; Cień własny", "Zabawki z klocków"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Graniastosłupy, ostrosłupy", "Pomnik na cześć pudełka "));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kolejka z klocków", "Bryły przenikające się I – temat z egzaminu"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kompozycja z brył prostych", "Miasto z klocków"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Klamerki", "Warjacje literowe"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Litery z widoków; Cień rzucony", "Spadek terenu z rzutu i widoku"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Martwa natura I", "Trzy taborety"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kolegiata", "Szopka Bożonarodzeniowa"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "FILM, Tralki", "Sen szachisty"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Martwa natura II", "Szklanki, Kubki, Butelki Kompozycja"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kolumny", "Biforium"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Sklepienia gotyckie", "Bryły przenikające się II - dwa walce, dwie kostki"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Okna z widoków PRZEGLĄD", "Portale"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kościół Madonna di San Biagio", "Opactwo Iona - rysunek w oparciu o aksonometrie"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Skwer miejski", "Zestaw mebli miejskich"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Przystanek autobusowy", "Budka telefoniczna"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Schody", "Schody do nieba"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Pomnik Drzewo architektury", "Drzewa z przerysu"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Pomnik starego drzewa", "Druga połowa drzewa"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Pałac Decjusza", "Łazienki królewskie – rysunek przerysu"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Ogród klasyczny w kontekście małej architektury pałacowej", "Betonowy ogród"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Ogród angielski z ruinami świątyni antycznej", "Dworek szlachecki"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Drewniana cerkiew", "Tradycyjne sprzęty i urządzenia rolnicze"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Architektura i krajobraz wiejski", "Wiejski krajobraz podhalański - wioska góralska"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Uliczka wielozbiegowa", "Dawny port śródziemnomorski"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Plac zabaw we wnętrzu urbanistycznym – sylwetki ludzkie", "Fabryka obłoków"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wnętrze restauracji", "Wnętrze szklarni"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Pawilon letni", "Nowoczesna altanka działkowa"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Nowoczesne wnętrze miejskie – rytm", "We wnętrzu zegarka"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wnętrze galerii handlowej", "Wnętrze sklepu modowego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "PLENER", "PLENER"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Plac budowy w mieście", "Efekt finalny budowy"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Rynek miasta z lotu ptaka", "PRZYGOTOWANIE DO PRZEGLĄDU"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Nowoczesna przystań jachtowa PRZEGLĄD", ""));
                break;
            case SECOND_YEAR:
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wariacje literowe ", "Pomnik kompozycji w parku"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Klamerki jako drapacze chmur (3 pkt zbiegu)", "Domek na kurzej stopie \\ Zamek Gargamela"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Martwa natura III", "Kaplica na bagnie"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Highlighty ruralistyki", "Kamieniołom"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Zamek na skale", "Opactwo na skale"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Dom rzymski", "Wnętrze nowoczesnego domu atrialnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Samochody", "Pojazdy jedno i dwuśladowe"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Szkło – drapacze chmur z poziomu człowieka", "Palmiarnia miejska z zewnątrz i wewnątrz"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Highlighty epoki renesansu i baroku", "Plomba w pierzei klasycznej"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Miasto klasyczne z lotu ptaka", "Nowoczesne auto na tle starego miasta"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Budynek sieci restauracji + logo", "Zabytkowa taksówka w nowoczesnej metropolii"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Współczesna metropolia z lotu ptaka", "Portale nowoczesne"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Miasto przyszłości nad oceanem ", "Most przyszłości"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Highlighty epoki romańskiej i gotyku", "Zespół gmachów o architekturze inspirowanej epoką gotyku CALATRAVA"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Adaptacja wnętrza katedry gotyckiej na bibliotekę ", "Wizja nowoczesnej biblioteki w budynku meta gotyckim"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Świątynia w pierzei ulicznej widziana z poziomu dachów", "Świątynia ekumeniczna"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wnętrze nowoczesnego dworca.", "Wizja nowoczesnego dworca z zewnątrz"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Nowoczesny port (odbicia w wodzie)", "Platforma wiertnicza"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Lotnisko z lotu ptaka", "Wnętrze terminalu z widocznym na zewnątrz pasem startowym"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Komunikacja miejska w mieście przyszłości", "Estakady drogowe w kontekście krajobrazowym"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Rysunek postaci z modela", "Postać stojąca, idąca, biegnąca"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Bryły platońskie", "Kompozycja z elementu powtarzalnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Plakat dynamiczny", "Plakat statyczny"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje I dominanta przez zaskoczenie/naprowadzenie", "Schemat i opis kompozycji"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje II kompozycja rytmiczna potęgującą /z zaburzeniem", "Schemat i opis kompozycji"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Budynek z elewacja z elementu powtarzalnego – k. rytmiczna", "Płyta rynku zbudowana z elementu powtarzalnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje III kompozycja dynamiczna", "Schemat i opis kompozycji"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje IV rytmiczna awansująca", "Schemat i opis kompozycji, architektura z wykorzystaniem kompozycji przestrzennych z elementu powtarzalnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wnętrze teatru nowoczesnego", "Wnętrze teatru antycznego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Hol zwieńczony kopułą – cytat", "Hol z akcentem rzeźbiarskim widziany z dołu"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Budowa piramidy", "Wnętrze nowoczesnego biura"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wizja arki noego", "Stacja kolejki górskiej"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Roboty w Kamieniołomie", "Wróć do Sorrento"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "POPRAWA PRZEGLĄD", "Miasto przyszłości z lotu ptaka"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "POPRAWA PRZEGLĄD", ""));
                break;
            case THIRD_YEAR:
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Wariacje literowe", ""));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Świątynia w pierzei ulicznej widziana z poziomu dachów", "Świątynia ekumeniczna w pierzei nowoczesnego miasta widziana z poziomu budynków"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Martwa natura III", "Kaplica na bagnie"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Highlighty ruralistyki (4)", "Drewniana cerkiew z rzutu i widoków"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Koń trojański", "Wielki mur chiński"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Forum romanum - rys. studyjny (5)", "Arena walk (Colloseum) z lotu ptaka - rys. studyjny (2)"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Zamek na skale", "Turniej rycerski na zamku - rys. studyjny (2)"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Dzielnica portowa w czasach wielkich odkryć geograficznych", "Arcyserwis - rysunek studyjny (3)"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Highlighty epoki renesansu i baroku", "Sala audiencyjna z fotelem cesarskim - rys. studyjny (2)"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "", "Nowoczesne auto na tle starego miasta"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "", "Zabytkowa taksówka w nowoczesnej metropolii"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Współczesna metropolia z lotu ptaka", ""));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Architektura w krajobrazie", ""));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Highlighty epoki romańskiej i gotyku", "Zespół gmachów o architekturze inspirowanej epoką gotyku CALATRAVA"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kościół Madonna di San Biagio (PRZEGLĄD)", "Wizja nowoczesnej biblioteki w budynku meta gotyckim"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Adaptacja wnętrza katedry na bibliotekę", "TEMAT OPISOWY ZNALEŹĆ"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "", ""));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Nowoczesny port (odbicia w wodzie)", "Platforma wiertnicza \\ XVI w. Port przed wyprawą kolonialna"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Lotnisko z lotu ptaka", "Wnętrze terminalu z widocznym na zewnątrz pasem startowym"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Komunikacja miejska w mieście przyszłości", "Estakady drogowe w kontekście krajobrazowym"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Rysunek postaci z modela", "Studium twarzy"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Kompozycja z K-dronów", "Kompozycja z elementu powtarzalnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Plakat dynamiczny", "Plakat statyczny"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje I dominanta przez zaskoczenie/naprowadzenie", "Schemat i opis kompozycji"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje II kompozycja rytmiczna potęgującą /z zaburzeniem", "Schemat i opis kompozycji"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Budynek z elewacja z elementu powtarzalnego – k. rytmiczna", "Płyta rynku zbudowana z elementu powtarzalnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje III kompozycja dynamiczna", "Schemat i opis kompozycji"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "kompozycje IV rytmiczna awansująca", "Schemat i opis kompozycji, architektura z wykorzystaniem kompozycji przestrzennych z elementu powtarzalnego"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Ćwiczenie - rysunek chmur (3 rodzaje)", "Ćwiczenie - rysunek skał w wodzie"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Arena walk (Colloseum) z lotu ptaka - rys. studyjny (2)", "Hol z akcentem rzeźbiarskim widziany z dołu"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Stacja kolejki górskiej", "Krajobraz wsi podhalańskiej"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Premiera nowego modelu samochodu w salonie", "Miasto orientu z lotu ptaka"));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Miasteczko średniowieczne z górującą katedrą", ""));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Winiarnia", ""));
                lessonPrograms.add(createNewLessonProgram(lessonPrograms.size(), "Drewniany gród z wczesnego średniowiecza z lotu ptaka", ""));
                break;
            case HOLIDAY_I_YEAR:
            case HOLIDAY_II_YEAR:
                for(int i = 0; i < 6; i++){
                    lessonPrograms.add(createNewLessonProgram(i, "", ""));
                }
                break;
            case INTENSIVE_YEAR:
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Zajęcia wprowadzające, sześcian, perspektywa", "-", "Multiplikacja w bok i w przód, figury - T L O"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Multiplikacja w bok i w przód, figury -X +  O", "Sześciany z widoków", "Multiplikacje – wężyk"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Obważanek", "Walce, stożki, kule; Cień własny", "Bryły z widoków"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Graniastosłupy, ostrosłupy", "Zabawki z klocków", "Pomnik na cześć pudełka "));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Pociąg z klocków", "Klamerki", "Bryły przenikające się I – temat z egzaminu"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Rysunek z widoku i rzutu; Cień rzucony", "Spadek terenu z rzutu i przekroju", "Miasto z klocków"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Kompozycja z brył prostych z wyobraźni", "Kolegiata", "Kompozycja własna z brył występujących w kolegiacie"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Warjacje literowe", "Tralki", "Sen szachisty"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Kolumny", "Kolumna jońska lub koryncka z draperią", "Biforium"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Martwa natura I", "Bryły przenikające się II - 2 walce, 2 kostki", "Trzy taborety"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Sklepienia gotyckie", "Okna z widoków", "Portale"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "FILM, Kościół Madonna di San Biagio", "Opactwo Iona - rysunek w oparciu o aksonometrie", "Kościół Santa Maria del Fiore z przerysu"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Martwa natura II", "Martwa natura II w detalu", "Szklanki, Kubki, Butelki Kompozycja"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Skwer miejski", "Przystanek autobusowy", "Zestaw mebli miejskich"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Schody", "Wnętrze restauracji", "We wnętrzu zegarka"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Pomnik Drzewo architektury / PRZEGLĄD", "Pomnik starego drzewa / PRZEGLĄD", "Drzewa z przerysu"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Pałac Decjusza", "Pałac decjusza dokańczanie / drzewa", "Druga połowa drzewa"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Drewniana cerkiew z rzuti i widoków", "> ciąg dalszy tematu porannego", "Dworek szlachecki"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Uliczka wielozbiegowa", "Plac zabaw we wnętrzu urbanistycznym – sylwetki ludzkie", "Dzielnica portowa"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Pawilon letni", "Nowoczesny plac miejski – rytm", "Wnętrze szklarni"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Dom rzymski", "Wnętrze nowoczesnego domu atrialnego", "Portale nowoczesne"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Rysunek postaci z modela", "Postać stojąca, idąca, biegnąca", "Wnętrze sklepu modowego (sylwetki)"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Szkło – drapacze chmur z poziomu człowieka", "Palmiarnia miejska z zewnątrz i wewnątrz", "Samochody"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Miasto na marsie", "samochody w kontraście miejskim (2in1)", "Plomba w pierzei klasycznej"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Plakat dynamiczny", "Plakat statyczny", "Kompozycja z elementu powtarzalnego"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "kompozycje I dominanta przez zaskoczenie/naprowadzenie", "kontynuacja zajęć", "Wizja nowoczesnego dworca z zewnątrz"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "kompozycje II kompozycja rytmiczna potęgującą /z zaburzeniem", "kontynuacja zajęć", ""));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Budynek z elewacja z elementu powtarzalnego – k. rytmiczna", "Most przyszłości zbudowany z modułów", "Plac śródmiejski zbudowany z elementu powtarzalnego"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "kompozycje III kompozycja dynamiczna", "kontynuacja zajęć", ""));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Budynek sieci restauracji + logo", "Estakady drogowe w kontekście krajobrazowym", "Wnętrze galerii handlowej"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Wnętrze teatru antycznego i nowoczesnego (2in1)", "Wnętrze studia telewizyjnego", "Hol z akcentem rzeźbiarskim widziany z dołu"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Budowa piramidy", "Plac budowy architektury wielkoskalowej.", "Miasto przyszłości z lotu ptaka"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Roboty w Kamieniołomie", "Wizja arki noego", "Opactwo na skale"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Adaptacja wnętrza katedry gotyckiej na bibliotekę ", "Świątynia w pierzei ulicznej widziana z poziomu dachów", "Kościół ekumeniczny"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "Wnętrze nowoczesnego dworca.", "Miasto przyszłości z lotu ptaka", "Miasto orientu z lotu ptaka"));
                lessonPrograms.add(createNewIntensiveLessonProgram(lessonPrograms.size(), "POPRAWA PRZEGLĄD", "", ""));
                break;
        }
        Program program = new Program(lessonPrograms);
        Program insertedProgram = programDao.insertProgram(program, year);
    }

    private LessonProgram createNewLessonProgram(int order, String classes, String homework) {
        System.out.println("create new lesson order " + order);
        LessonProgram lessonProgram = new LessonProgram(null, order);
        List<ClassesTopic> classesTopics = new ArrayList<ClassesTopic>();
        classesTopics.add(new ClassesTopic(classes, false));
        lessonProgram.setClassesTopics(classesTopics);
        lessonProgram.setHomeworkTopic(new HomeworkTopic(homework, false));
        lessonProgram.setChapterTitle(new ChapterTitle(""));
        return lessonProgram;
    }

    private LessonProgram createNewIntensiveLessonProgram(int order, String classes1, String classes2, String homework) {
        System.out.println("create new lesson order " + order);
        LessonProgram lessonProgram = new LessonProgram(null, order);
        List<ClassesTopic> classesTopics = new ArrayList<ClassesTopic>();
        classesTopics.add(new ClassesTopic(classes1, false));
        classesTopics.add(new ClassesTopic(classes2, false));
        lessonProgram.setClassesTopics(classesTopics);
        lessonProgram.setHomeworkTopic(new HomeworkTopic(homework, false));
        lessonProgram.setChapterTitle(new ChapterTitle(""));
        return lessonProgram;
    }

    private void createNextProgram(Year year) {
        Program program = year.getProgram();
        List<LessonProgram> lessonPrograms = program.getLessons();
        for (LessonProgram lessonProgram : lessonPrograms) {
            lessonProgram.setId(null);
            for (ClassesTopic classesTopic : lessonProgram.getClassesTopics()) {
                classesTopic.setId(null);
                classesTopic.setDone(false);
            }
            lessonProgram.getHomeworkTopic().setId(null);
            lessonProgram.getHomeworkTopic().setDone(false);
            lessonProgram.getChapterTitle().setId(null);
        }
        programDao.insertProgram(program, year);
    }


    private List<Year> createYears(Course course, List<Year> years) {
        for (Year year : years) {
            year.setId(null);
            yearDao.insertYear(year, course);
        }
        return years;
    }

    private List<Year> getYearsWithProgram(Course course) {
        List<Year> studentYears = yearDao.findYearsBy(course);
        for (Year studentYear : studentYears) {
            Program program = programDao.findProgramFor(studentYear);
            studentYear.setProgram(program);
        }
        return studentYears;
    }


    public static Course getLastCourse(DatabaseAdapter databaseAdapter) {
        CourseDao courseDao = databaseAdapter.getCourseDao();
        return courseDao.getLastCourse();
    }

    private void open() {
        if (databaseAdapter != null) {
            databaseAdapter.open();
            this.courseDao = databaseAdapter.getCourseDao();
            this.yearDao = databaseAdapter.getStudentYearDao();
            this.groupDao = databaseAdapter.getStudentGroupDao();
            this.programDao = databaseAdapter.getProgramDao();
        }
    }

    private void close() {
        if (databaseAdapter != null) {
            databaseAdapter.close();
        }
    }
}
